<html>
<head>
<title>Remake de Fruity Frank - Version 0.05</title>
<style type="text/css">
span {
	font-family: 'Courier New';
	font-size: 10pt;
	color: #000000;
}
.SpanClass0 {
	color: #808080;
}
.SpanClass3 {
	color: #008080;
}
.SpanClass5 {
	font-weight: bold;
	color: #0000FF;
}
.SpanClass7 {
	color: #808080;
}
.SpanClass10 {
	font-weight: bold;
	color: #000080;
}
.SpanClass11 {
}
</style>
</head>
<body bgcolor="#FFFFFF">
<h2>Remake (parcial) de Fruity Frank... 05 - Un primer enemigo</h2>
<p align="right">(Volver al <a href="doc.html">&iacute;ndice</a>) </p>
<p>Vamos a a&ntilde;adir un primer enemigo, cuyo movimiento est&eacute; prefijado y sea sencillo. Todav&iacute;a no comprobaremos si nuestro personaje y el &quot;enemigo&quot; colisionan.</p>

<p>La idea b&aacute;sica es sencilla: tendremos una nueva imagen, que dibujaremos en sus propias coordenadas x e y, y al final de cada pasada calcularemos cual ser&aacute; su nueva posici&oacute;n.</p>

<p>La imagen la extraeremos de una de las capturas del juego, igual que hicimos con la de nuestro personaje. Para cargarla y dibujarla ser&aacute; muy parecido a lo que ya hemos hecho:</p>


<pre><code>    int xEnemigo1=250, yEnemigo1=250;
    SDLA_Imagen* enemigo1;
    enemigo1=SDLA_cargarImagen(&quot;enemigo1i1.bmp&quot;);
    ...
    SDLA_dibujarImagenOculta(enemigo1, xEnemigo1, yEnemigo1);</code></pre>

<p>Moverlo no es mucho m&aacute;s dif&iacute;cil: basta con cambiar su coordenada X o su coordenada Y (o ambas) en cada pasada del bucle &quot;do..while&quot;. Por ejemplo, como primer acercamiento podr&iacute;amos hacer que se moviera hacia la derecha con &quot;xEnemigo1 += 3;&quot;</p>    

<p>Lo razonable es que no siempre se mueva hacia la derecha (o al menos que lo haga s&oacute;lo hasta llegar al margen de la pantalla, en vez de seguir avanzando incluso entonces). Un movimiento un poco m&aacute;s real ser&iacute;a que fuera hacia un lado de la pantalla y, cuando llegara a &eacute;l, &quot;rebotara&quot; para volver hacia el lado contrario. Hay varias formas de conseguir este efecto. Por ejemplo:</p>

<ul>
<li>Tener una variable auxiliar llamada &quot;direcci&oacute;n&quot; que nos permita memorizar hacia qu&eacute; lado nos movemos. Cuando la &quot;direcci&oacute;n&quot; sea hacia la derecha, aumentaremos la X del personaje; cuando la &quot;direcci&oacute;n&quot; sea hacia la izquierda, disminuiremos la X del personaje; cuando llegue al margen derecho, cambiaremos &quot;direcci&oacute;n&quot; para que sea &quot;hacia la izquierda&quot;; cuando llegue al margen izquierdo, cambiaremos &quot;direcci&oacute;n&quot; para que sea &quot;hacia la derecha&quot;.</li>
<li>Una alternativa es sumar siempre un incremento a xPersonaje. Este incremento empezar&aacute; siendo +3 (por ejemplo) para que se mueva hacia la derecha, y cada vez que llegue a un extremo de la pantalla, cambiaremos el signo a ese incremento, para que empiece a desplazarse en sentido contrario. Podr&iacute;a ser algo as&iacute;:</li>
</ul>

<pre><code>        xEnemigo1 += incrEnemigo;

        if (xEnemigo1 &lt; xIniPantalla) 
        {
          xEnemigo1 = xIniPantalla;
          incrEnemigo = -incrEnemigo;
        }
        
        if (xEnemigo1 &gt; xFinPantalla-anchoEnemigo1) 
        {
          xEnemigo1 = xFinPantalla-anchoEnemigo1;
          incrEnemigo = -incrEnemigo;
        }</code></pre>

<p>Si eso est&aacute; dentro del do..while del &quot;bucle de juego&quot;, acabamos de conseguir que nuestro enemigo se mueva en cada &quot;fotograma&quot; del juego, tanto si movemos nuestro personaje como si no lo hacemos. </p>    

<p>Como siempre, todo el proyecto est&aacute; en: <a href="http://code.google.com/p/fruityfrank"> code.google.com/p/fruityfrank</a></p>
<p align="right">(Volver al <a href="doc.html">&iacute;ndice</a>) </p>
</body>
</html>
